home *** CD-ROM | disk | FTP | other *** search
- /*________________________________________________________
-
- File: UserAlert.c
-
- C code for a printing extension that adds an alert
- item to the desktop printer menu and displays the alert
- during despooling.
-
- Dave Hersey
- Apple Developer Technical Support
-
- 12/01/92 - dmh - created.
- 12/22/93 - dmh - updated for b3.
- 5/03/94 - dmh - updated for f2.
- 6/14/96 - cn - Updated to support Universal Interfaces 2.1.
-
- (Note: all functions are in the Mark menu.)
-
- __________________________________________________________*/
-
- #include <Types.h>
- #include <Errors.h>
- #include <Resources.h>
- #include <ToolUtils.h>
- #include <GXPrinting.h>
- #include <GXExceptions.h>
-
- #include "UserAlert.h"
-
- /*******************************************************************
- NewGetDTPMenuList is our override for GXGetDTPMenuList. All we
- do is add our item to the DTP printer menu and forward the
- message.
-
- ********************************************************************/
-
- OSErr NewGetDTPMenuList(MenuHandle aMenu)
- {
- OSErr err1, err2;
- StringHandle itemStr;
-
- // Get our menu item's name and append it to the desktop printer menu.
-
- itemStr = (StringHandle) GetString(r_AlertString);
- err1 = ResError();
-
- if (err1 == noErr)
- {
- HLock((Handle) itemStr);
- AppendMenu(aMenu, (ConstStr255Param) *itemStr);
- ReleaseResource((Handle) itemStr);
- }
-
- err2 = Forward_GXGetDTPMenuList(aMenu);
-
- if (err1 == noErr)
- err1 = err2;
-
- return err1;
- }
-
-
- /*******************************************************************
- NewDTPMenuSelect is our override for GXDTPMenuSelect. If our
- DTP printer menu item is selected, we just put up an alert.
- Otherwise:
-
- If the menu item passed is < 1 we forward it. If it's greater
- than the number of items we added, we subtract the number of
- items we added before forwarding.
-
- ********************************************************************/
-
- OSErr NewDTPMenuSelect(short itemID, Boolean *done)
- {
- OSErr err = noErr;
- gxStatusRecord *pStatus;
-
- // If itemID < 1, this is a GX-added menu item. Forward as is.
-
- if (itemID < 1)
- err = Forward_GXDTPMenuSelect(itemID);
- else
- switch (itemID)
- {
- case kAlertItem: // Our alert item.
-
- pStatus = (gxStatusRecord *)
- NewPtrClear(sizeof(gxStatusRecord) + sizeof(short));
-
- require_action(pStatus, CantMakeStatusRecord , err = MemError(););
-
- // Fill in the status record appropriately.
-
- pStatus->statusOwner = kCreator;
- pStatus->statResId = kUserAttentionID;
- pStatus->statResIndex = kAlertStatusIdx;
-
- // Continue alerting the user until s/he responds.
-
- do
- {
- err = GXAlertTheUser(pStatus);
- }
- while ((err == noErr) && (pStatus->dialogResult == 0));
-
- *done = true;
- DisposPtr((Ptr) pStatus);
- break;
-
- default:
- err = Forward_GXDTPMenuSelect(itemID -kNumMenuItemsWeAdded);
- }
-
- CantMakeStatusRecord:
- return err;
- }
-
-
- /*******************************************************************
- NewDespoolPage is our override for GXDespoolPage. Here, we
- despool the desired page & format and then display an alert.
-
- ********************************************************************/
-
- OSErr NewDespoolPage(gxSpoolFile thePrintFile, long pageNumber,
- gxFormat pageFormat, gxShape *pagePicture,
- Boolean *formatChanged)
- {
- OSErr err;
- gxStatusRecord *pStatus;
-
- err = Forward_GXDespoolPage(thePrintFile, pageNumber,
- pageFormat, pagePicture, formatChanged);
-
- nrequire(err, FailedForward_GXDespoolPage);
- pStatus = (gxStatusRecord *) NewPtrClear(sizeof(gxStatusRecord));
- require_action(pStatus, CantMakeStatusRecord, err = MemError(););
-
- // Fill in the status record appropriately.
-
- pStatus->statusOwner = kCreator;
- pStatus->statResId = kUserAttentionID;
- pStatus->statResIndex = kAlertStatusIdx;
-
- // Continue alerting the user until s/he responds.
-
- do
- {
- err = GXAlertTheUser(pStatus);
- }
- while ((!err) && (pStatus->dialogResult == 0));
-
- DisposPtr((Ptr) pStatus);
-
- CantMakeStatusRecord:
- FailedForward_GXDespoolPage:
- return err;
- }
-
-